home *** CD-ROM | disk | FTP | other *** search
File List | 1990-12-28 | 3.5 KB | 112 lines |
- 0 ' Analog metric clock, measures 100 hurs per day
- 1 ' by Robert Fischer, 1990
- 2 ' This program is in the public domain.
- 3 ' The smaller two hands combined give the number of hurs, and the last
- 4 ' hand rotates once per hur. You _could_ design the hands to represent
- 5 ' different digits of the time.
- 6 ' ============ paramaters
- 7 Centerx=320:Centery=200
- 8 Xrad=200:Yrad=200
- 9 Charx=8:Chary=16
- 10 ' ===================
- 11 X$= TIME$
- 12 Hour= VAL( MID$(X$,1,2))
- 13 Minute= VAL( MID$(X$,4,2))
- 14 Second= VAL( MID$(X$,7,2))
- 15 ' ===================
- 16 MODE =3: LINE WIDTH = 1
- 17 Disp_Face
- 18 Compute_Newhands(Time):Compute_Newhands(Time):Disp_Hands
- 19 Start_Sec= TIMER -Hour*720000-Minute*12000-Second*200
- 20 WHILE 1
- 21 Time=( TIMER -Start_Sec)/172.8
- 22 Redisp_Clock(Time)
- 23 WEND
- 24 END
- 25 ' =====================
- 26 DEF PROC Redisp_Clock(Time)
- 27 PROC Compute_Newhands(Time)
- 28 PROC Change_Hands
- 29 RETURN
- 30 '
- 31 DEF PROC Compute_Newhands(Time)
- 32 Compute_Hand(0,Time/10000,.5)
- 33 Compute_Hand(1,Time/1000,.64)
- 34 Compute_Hand(2,Time/100,.9)
- 35 RETURN
- 36 '
- 37 DEF PROC Change_Hands
- 38 FOR I=0 TO 2
- 39 IF Oldhandx(I)<>Handx(I) OR Oldhandy(I)<>Handy(I) THEN
- 40 Draw_Line(Centerx,Centery,Oldhandx(I),Oldhandy(I),3-I)
- 41 Draw_Line(Centerx,Centery,Handx(I),Handy(I),3-I)
- 42 ENDIF
- 43 NEXT I
- 44 RETURN
- 45 '
- 46 DEF PROC Disp_Hands
- 47 FOR I=0 TO 2
- 48 Draw_Line(Centerx,Centery,Handx(I),Handy(I),3-I)
- 49 NEXT I
- 50 RETURN
- 51 '
- 52 DEF PROC Disp_Clock(Time)
- 53 PROC Disp_Face
- 54 PROC Disp_Hand(Time/10000,.6)
- 55 PROC Disp_Hand(Time/1000,.7)
- 56 PROC Disp_Hand(Time/100,.9)
- 57 RETURN
- 58 '
- 59 DEF PROC Disp_Face
- 60 LINE WIDTH = 1
- 61 ELLIPSE Centerx,Centery,Xrad+1,Yrad+1
- 62 FOR I=0 TO 49
- 63 Angle!=I* PI /25:S!= SIN(Angle!):C!= COS(Angle!)
- 64 IF I MOD 5=0 THEN
- 65
- 66 X1!=Centerx+.91*S!*Xrad
- 67 Y1!=Centery-.91*C!*Yrad
- 68 X2!=Centerx+S!*Xrad
- 69 Y2!=Centery-C!*Yrad
- 70 DRAW INT(X1!+.5), INT(Y1!+.5) TO INT(X2!+.5), INT(Y2!+.5)
- 71
- 72 TEXT Centerx+.9*S!*Xrad-Charx/2*(1+S!),Centery-.9*C!*Yrad+Chary/2*(1+C!), CHR$(I/5+ ASC("0"))
- 73 ELSE
- 74 X1!=Centerx+.95*S!*Xrad
- 75 Y1!=Centery-.95*C!*Yrad
- 76 X2!=Centerx+S!*Xrad
- 77 Y2!=Centery-C!*Yrad
- 78 DRAW INT(X1!+.5), INT(Y1!+.5) TO INT(X2!+.5), INT(Y2!+.5)
- 79 ENDIF
- 80 NEXT I
- 81 RETURN
- 82 '
- 83 DEF PROC Draw_Centerline(Angle!,Start!,End!)
- 84 LOCAL S!,C!
- 85 S!= SIN(Angle!):C!= COS(Angle!)
- 86 DRAW Centerx+Start!*S!*Xrad,Centery-Start!*C!*Yrad TO Centerx+End!*S!*Xrad,Centery-End!*C!*Yrad
- 87 RETURN
- 88 '
- 89 DEF PROC Disp_Hand(Number!,Length!,Thickness)
- 90 LOCAL S!,C!,Angle!
- 91 LINE WIDTH = Thickness
- 92 Angle!=Number!* PI /5
- 93 S!= SIN(Angle!):C!= COS(Angle!)
- 94 DRAW Centerx,Centery TO Centerx+Length!*S!*Xrad,Centery-Length!*C!*Yrad
- 95 RETURN
- 96 DEF PROC Compute_Hand(Ar_Part,Number!,Length!)
- 97 LOCAL S!,C!,Angle!
- 98 Oldhandx(Ar_Part)=Handx(Ar_Part)
- 99 Oldhandy(Ar_Part)=Handy(Ar_Part)
- 100 '
- 101 Angle!=Number!* PI /5
- 102 S!= SIN(Angle!):C!= COS(Angle!)
- 103 Handx(Ar_Part)=Centerx+Length!*S!*Xrad
- 104 Handy(Ar_Part)=Centery-Length!*C!*Yrad
- 105 RETURN
- 106 '
- 107 DEF PROC Draw_Line(A,B,X,Y,Thickness)
- 108 LINE WIDTH = Thickness
- 109 DRAW A,B TO X,Y
- 110 RETURN
-